package com.swak.consistency.core.resolve;

import org.springframework.core.Ordered;

import com.swak.annotation.ConsistencyScheme;
import com.swak.consistency.core.attribute.ConsistencyAttribute;
import com.swak.consistency.core.context.ConsistencyContext;

/**
 * 事务属性获取方式 --根据具体的 rpc 来确定
 * 
 * @author DELL
 */
public interface ContextResolver<T extends ConsistencyContext> extends Ordered {

	/**
	 * 获取事务属性
	 * 
	 * @return
	 */
	T acquire(ConsistencyAttribute attribute);

	/**
	 * 获取事务属性
	 * 
	 * @return
	 */
	default T create(ConsistencyAttribute attribute) {
		return null;
	}

	/**
	 * 判定支持
	 */
	default boolean support(ConsistencyScheme scheme) {
		return true;
	}

	/**
	 * 发射数据
	 */
	default void transmit(T context) {
	}

	/**
	 * 排序: 小到大的排序
	 */
	@Override
	default int getOrder() {
		return 0;
	}
}